283. 移动零

283. 移动零

题目链接

分析

其实就跟 27. 移除元素 差不多,只不过就是多了一步,就是在双指针结束之后,把从慢指针到数组末尾所有的元素都换成 0,其中需要注意的的是,因为双指针 for 循环结束的是,慢指针 slow 指向的就是下一个插入元素的位置(双指针的慢指针就是这个定义),所以再开始循环从慢指针到数组末尾的时候,slow 直接用即可,不需要再加一了。

解法

public void moveZeroes(int[] nums) {
    // 首先用双指针法移动元素
    int slow=0,fast=0;
    for(;fast<nums.length;fast++){
        if(nums[fast]!=0){
            nums[slow] = nums[fast];
            slow++;
        }
    }
    // 然后再从慢指针到快指针设置值
    for(;slow<nums.length;slow++){
        nums[slow]=0;
    }
}

相关题

27. 移除元素
26. 删除有序数组中的重复项
844. 比较含退格的字符串
977. 有序数组的平方
滑动窗口
209. 长度最小的子数组
904. 水果成篮